package br.com.rotary.manager.criar;

import br.com.rotary.enums.Status;
import br.com.rotary.modelo.Anexo;
import br.com.rotary.modelo.Endereco;
import br.com.rotary.modelo.FichaInscricao;
import br.com.rotary.modelo.Pessoa;
import br.com.rotary.servico.FichaInscricaoServico;
import br.com.rotary.utilitario.ArquivoUtilitario;
import br.com.rotary.utilitario.Msg;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author laverson
 */
@ViewScoped
@ManagedBean
public class ManagerCriarFichaInscricao implements Serializable {

    @EJB
    FichaInscricaoServico fichaServico;
    private FichaInscricao ficha;
    private ArquivoUtilitario arquivoUtilitario;

    @PostConstruct
    public void init() {
        this.ficha = new FichaInscricao();
        this.ficha.setParticipante(new Pessoa());
        this.ficha.getParticipante().setEndereco(new Endereco());
        this.ficha.setConvidado(new Pessoa());
        this.ficha.setAnexos(new ArrayList<Anexo>());

        this.arquivoUtilitario = new ArquivoUtilitario();
    }

    public void salvar() {
        try {

//            if (!ficha.getTipoParticipante().equals(TipoParticipante.CONVIDADDO)
//                    && !ficha.getTipoParticipante().equals(TipoParticipante.PALESTRANTE)
//                    && ficha.getClube() == null) {
//                Msg.messagemError("O campo Clube é obrigatório !");
//                return;
//            }
            arquivoUtilitario.gravarAnexos(this.ficha.getAnexos());
            arquivoUtilitario.removerBytes(this.ficha.getAnexos());

            if (this.ficha.getConvidado().equals(new Pessoa())) {
                this.ficha.setConvidado(null);
            }

            this.ficha.setStatus(Status.PAGO);

            fichaServico.salvar(this.ficha);
            Msg.messagemInfo(Msg.SuccessFull);
            init();
        } catch (Exception e) {
            System.err.println(e);
        }
    }

    public void adicionarAnexo(FileUploadEvent event) throws IOException {
        try {

            this.ficha.getAnexos().add(arquivoUtilitario.adicionarArquivo(event.getFile().getContents(), event.getFile().getFileName(), event.getFile().getContentType()));

        } catch (FileNotFoundException e) {

            System.err.println(e);
        } catch (SQLException e) {

            System.err.println(e);
        }
    }

    /**
     * Remove o anexo da lista de anexos que está sendo adicionado e remove o
     * arquivo do diretório que foi gravado
     *
     * @param anexo
     */
    public void removerAnexo(Anexo anexo) {
        try {
            arquivoUtilitario.excluirArquivo(new File(anexo.getUrl() + anexo.getNome()));
            this.ficha.getAnexos().remove(anexo);
        } catch (Exception e) {
            System.err.println(e);
            Msg.messagemError(Msg.Failure);
        }
    }

    public FichaInscricao getFicha() {
        return ficha;
    }

    public void setFicha(FichaInscricao ficha) {
        this.ficha = ficha;
    }
}
